export interface DatabaseConfig {
    host: string;
    port: number;
    username: string;
    password: string;
    database: string;
    synchronize: boolean;
    logging: boolean;
    dropSchema?: boolean;
}

export interface RedisConfig {
    host: string;
    port: number;
    password: string;
    db: number;
    maxRetries: number;
}

export interface JwtConfig {
    secret: string;
    expiresIn: string;
}

export interface LoggingConfig {
    level: string;
    dbLogLevel: string;
    cacheLogLevel: string;
    format: string;
}

export interface FeaturesConfig {
    swagger: boolean;
    debug: boolean;
}

export interface AppConfig {
    nodeEnv: string;
    port: number;
    database: DatabaseConfig;
    redis: RedisConfig;
    jwt: JwtConfig;
    logging: LoggingConfig;
    features: FeaturesConfig;
}

export interface EnvironmentVariables {
    NODE_ENV: string;
    APP_PORT: number;
    DB_HOST: string;
    DB_PORT: number;
    DB_USERNAME: string;
    DB_PASSWORD: string;
    DB_DATABASE: string;
    DB_SYNCHRONIZE: boolean;
    DB_LOGGING: boolean;
    DB_DROP_SCHEMA?: boolean;
    REDIS_HOST: string;
    REDIS_PORT: number;
    REDIS_PASSWORD: string;
    REDIS_DB: number;
    REDIS_MAX_RETRIES: number;
    JWT_SECRET: string;
    JWT_EXPIRES_IN: string;
    LOG_LEVEL: string;
    DB_LOG_LEVEL: string;
    CACHE_LOG_LEVEL: string;
    HTTP_LOG_LEVEL: string;
    LOG_FORMAT: string;
    ENABLE_SWAGGER: boolean;
    ENABLE_DEBUG: boolean;
}
